#include <stdio.h>

#define N   20 // 杨辉三角的最大层数

int main(void)
{
    int n, i, j;
    int arr[N + 1][N + 1] = {1}; // 初始化arr[0][0]为1，因为下面计算要用初始数据

    printf("请输入是几层的杨辉三角（ <= 20）：\n");
    scanf("%d", &n);
    if (n > N || n < 1) {
        printf("输入的数据不合法！\n");
        return 0;
    }

    /* 计算杨辉三角并保存到二维数组 */
    for (i = 1; i <= n; i++) {
        for (j = 1; j <= i; j++)
            arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
    }

    /* 格式化打印杨辉三角 */
    for (i = 1; i <= n; i++) {
        for (j = 0; j < n - i; j++) 
            printf("   ");
        
        for (j = 1; j <= i; j++) 
            printf("%5d ", arr[i][j]);

        printf("\n");
    }

    return 0;
}


